package com.example.d9_homework.homework10;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/**
 * 版本1
 */
public class Test1 {
    // 统计经过的站数
    private static int count = 0;

    public static void main(String[] args) {
        // 1. 将以下车站对应关系的数据存储到map集合中,key：表示站编号,value：表示站名,并遍历打印(可以不按顺序打印)：
        // 2. 计算地铁票价规则：
        // 总行程 3站内（包含3站）收费3元,3站以上但不超过5站（包含5站）的收费4元,5站以上的,在4元的基础上,每多1站增加2元,10元封顶；
        // 3. 需要对键盘录入的上车站和到达站进行判断,如果没有该站,提示重新输入,直到站名存在为止,每站需要2分钟.

        // 调用一个方法获取站点信息
        Map<Integer, String> stations = getStationsInfo();

        // 打印站点信息
        printStationsInfo(stations);

        Scanner sc = new Scanner(System.in);
        String startStation = "";
        String endStation = "";

        // 确保输入的站点是有效的
        do {
            System.out.println("请输入出发站:");
            startStation = sc.nextLine();
            if (!getStations(stations, startStation)) {
                System.out.print("输入的出发站不存在,请重新输入！");
            }
        } while (!getStations(stations, startStation));

        do {
            System.out.println("请输入到达站:");
            endStation = sc.nextLine();
            if (!getStations(stations, endStation)) {
                System.out.print("输入的到达站不存在,请重新输入！");
            }
        } while (!getStations(stations, endStation));

        // 计算票价
        int fare = calculateFare(stations, startStation, endStation);

        System.out.println("从[" + startStation + "]到[" + endStation + "]共经过" + count + "站,收费" + fare + "元,大约需要" + count * 2 + "分钟");
    }

    /**
     * 计算票价
     *
     * @param stations     站点信息集合
     * @param startStation 起始站点编号
     * @param endStation   终点站点编号
     * @return 返回票价
     */
    public static int calculateFare(Map<Integer, String> stations, String startStation, String endStation) {
        // 遍历集合,根据用户输入的站点计算起始站点编号和终点站点编号
        int startStationNumber = -1;
        int endStationNumber = -1;

        // 遍历集合,根据用户输入的站点计算起始站点编号和终点站点编号
        for (Integer key : stations.keySet()) {
            if (stations.get(key).equals(startStation)) {
                startStationNumber = key;
            } else if (stations.get(key).equals(endStation)) {
                endStationNumber = key;
            }
            if (startStationNumber != -1 && endStationNumber != -1) {
                break; // 找到两个站点就提前退出循环
            }
        }


        // 2.开始计算票价
        int distance = Math.abs(startStationNumber - endStationNumber);
        count = distance;
        // 计算票价
        int fare = 0;
        if (distance <= 3) {
            fare = 3;
        } else if (distance <= 5) {
            fare = 4;
        } else {
            fare = 4 + (distance - 5) * 2;
            if (fare > 10) {
                fare = 10;
            }
        }
        return fare;
    }

    /**
     * 判断站点是否存在
     *
     * @param stations 站点信息集合
     * @param station  站点名称
     * @return 返回true说明站点存在, 返回false说明站点不存在
     */
    private static boolean getStations(Map<Integer, String> stations, String station) {
        return stations.containsValue(station);
    }

    /**
     * 打印站点信息
     *
     * @param stations 站点信息集合
     */
    public static void printStationsInfo(Map<Integer, String> stations) {
        // 获取所有的key
        Set<Integer> keys = stations.keySet();
        int count = 0;
        // 遍历所有的key
        for (Integer key : keys) {
            // 获取key对应的value
            System.out.print(key + "--" + stations.get(key) + "\t");
            count++;
            // 每5个换行
            if (count % 5 == 0) {
                System.out.println();
            }
        }
        System.out.println(); // 最后一行可能不满5个强制换行
    }

    /**
     * 获取站点信息
     *
     * @return 返回存储站点信息的集合
     */
    public static Map<Integer, String> getStationsInfo() {
        Map<Integer, String> stations = new HashMap<>();
        stations.put(1, "黄花机场T1T2");
        stations.put(2, "木马坝");
        stations.put(3, "大路村");
        stations.put(4, "龙峰");
        stations.put(5, "曹家坪");
        stations.put(6, "檀木桥");
        stations.put(7, "龙华");
        stations.put(8, "韶光");
        stations.put(9, "东湖");
        stations.put(10, "农科院农大");
        stations.put(11, "隆平水稻博物馆");
        stations.put(12, "花桥");
        stations.put(13, "人民东路");
        stations.put(14, "芙蓉区政府");
        stations.put(15, "朝阳村");
        stations.put(16, "窑岭湘雅二医院");
        stations.put(17, "迎宾路口");
        stations.put(18, "烈士公园南");
        stations.put(19, "湘雅医院");
        stations.put(20, "文昌阁");
        stations.put(21, "六沟垅");
        stations.put(22, "湘雅三医院");
        stations.put(23, "白鸽咀");
        stations.put(24, "湖南工商大学");
        stations.put(25, "涧塘");
        stations.put(26, "麓谷公园");
        stations.put(27, "麓谷体育公园");
        stations.put(28, "长丰");
        stations.put(29, "和馨园");
        stations.put(30, "长庆");
        stations.put(31, "一师范西校区");
        stations.put(32, "中塘");
        stations.put(33, "象鼻窝");
        stations.put(34, "谢家桥");
        return stations;
    }
}
